
/******************/
/* TP5 - GRUPO 13 */
/******************/
/* Andre Bonna    */
/* Artur Gontijo  */
/* Ivo Trivella   */
/******************/

#include "arvbp.h"

/* ---------------------------------------- MENU ---------------------------------------- */

void MainMenu(FILE **arq, Noh *Node){

  char opt;
  int inteiro=0, res=0, raiz=0;

  /* Imprime o titulo da interface */
  printf("\n+======================================================+\n");
  printf("+================   Arvore B+  v5.0   =================+\n");
  printf("+======================================================+\n\n");  
  printf("\n\n ***********  M E N U    P R I N C I P A L  *********** \n");
  printf("|                                                      |\n");
  printf("|   1 - [I]NSERIR uma nova Chave                       |\n");
  printf("|   2 - [R]EMOVER uma Chave                            |\n");
  printf("|   3 - [B]USCAR por uma Chave                         |\n");
  printf("|   4 - [L]ISTAR as Chaves da Arvore                   |\n");
  printf("|   5 - [S]AIR do programa                             |\n");
  printf("|                                                      |\n");
  printf(" ****************************************************** \n");
  printf("\n ==> Digite o numero ou a letra da opcao desejada: ");
 
  opt = getchar();

  /* Age de acordo com a opcao do usuario */
  switch(opt) {
  case '1':
  case 'i':
  case 'I':
    /* Insere */
    while(1){
      system("clear");
      printf(" ==> [Inteiro]: ");
      scanf("%d", &inteiro);
      Insere(inteiro);
      getchar();
      printf("Deseja inserir outro inteiro?(s/n) ");
      scanf("%c", &opt);
      system("clear");
      if(opt == 'n') break;
    }
    getchar();
    MainMenu(arq, Node);
    break;

  case '2':
  case 'r':
  case 'R':
    /* Remove */
    while(1){
      system("clear");
      printf(" ==> Remover [Inteiro]: ");
      scanf("%d", &inteiro);
      Remove(raiz, inteiro);
      getchar();
      printf("Deseja remover outro inteiro?(s/n) ");
      scanf("%c", &opt);
      system("clear");
      if(opt == 'n') break;
    }
    getchar();
    MainMenu(arq, Node);
    break;

  case '3':
  case 'b':
  case 'B':
    /* Busca */
    while(1){
      system("clear");
      printf(" ==> Busca [Inteiro]: ");
      scanf("%d", &inteiro);
      res = Busca(inteiro);

      if(res == -1){
	printf("\nInteiro nao Encontrado!\n");
	break;
      }
      else printf("Inteiro Encontrado no Arquivo %d.arv\n", res);

      getchar();
      printf("Deseja buscar outro inteiro?(s/n) ");
      scanf("%c", &opt);
      system("clear");
      if(opt == 'n') break;
    }
    getchar();
    MainMenu(arq, Node);
    break;

  case '4':
  case 'l':
  case 'L':
    /* Lista */
    Lista(arq);
    system("clear");
    getchar();
    MainMenu(arq, Node);
    break;

  case '5':
  case 's':
  case 'S':  
    /* FREEEEEEEEEEEEEEEEEEs  */
    printf("\n\n\n  *** Obrigado por Utilizar a Arvore B+ 5.0! ***\n\n\n");
    break;

  default:
    /* Em entrada invalida, fecha o programa */
    printf("\n\n Opcao INVALIDA!\n Pressione <enter> para Retornar ao Menu...");
    getchar(); /* Aguarda o usuario digitar enter, para a visualizacao da mensagem */
    system("clear");
    MainMenu(arq, Node);
    break;
  }
  return;
}

/* ---------------------------------------- MAIN ---------------------------------------- */

int main(int argc, char *argv[]) {
  
  /* Declara uma variavel do indice (PKs) */
  Noh Node;
  
  /* Declara e inicializa apontadores para os arquivos */
  FILE *arq = NULL;   /* arq: Apontador pra abrir Arquivos Genericos */

  /* Nome do arquivo a ser gerado pela Funçao usada  */
  char nomearq[NOMEARQTAM];

  strcpy(nomearq, DATABASE);
  
  arq = fopen(nomearq,"a+"); /* ABRE */

  system("clear"); /* Limpa o prompt */

  MainMenu(&arq, &Node);

  return 0;
}

/* -------------------------------------------------------------------------------------- */
